#include <stdio.h>

int main()
{
    int a[2][3] =
    {
        {1, 2, 3},
        {4, 5, 6}
    };
    int *p[2]; // 指针数组：数组里的每个元素都是指针
    // int (*a)[2];
    // p[0]:指针数组里的第一个元素：第一个指针
    p[0] = a[0];                // 指向二维数组的首个一维数组
    printf("%d\n", *(p[0])); // 1

    p[0] = a[1];             // 指向二维数组的第二个一维数组 (第二个一维数组的首地址)
    printf("%d\n", *(p[0])); // 4

    p[0] = a[0]; //*a
    p[1] = *(a + 1);
    printf("%d\n", **(p + 1)); // 4     *(p+1): 4的地址 (第二个一维数组的地址)

    //字符的二维数组
    char s[2][10] = // 放在栈区
    {
        "suqian",
        "jiaoyu"
    };
    printf("%c\n", *s[0]);           // s
    printf("%c\n", *s[0] + 1);       // t  asi码+1
    printf("%c\n", *(s[0] + 1));     // u
    printf("%c\n", *(*(s + 1) + 1)); // i
    printf("%c\n", **(&s[0] + 1));   // j

    //字符串数组；每一个都是字符串指针(一维)
    char* s[2] = // 放在常量区
    {
        "suqian",
        "jiaoyu"
    };
}
